package com.hxht.storage.server.bean;

import java.util.Date;

public class TimeIntersection {
	
	private Date startTime;
	
	private Date stopTime;

	public TimeIntersection(){}
	
	public TimeIntersection(Date startTime, Date stopTime){
		this.startTime = startTime;
		this.stopTime = stopTime;
	}
	
	public Date getStartTime() {
		return startTime;
	}

	public void setStartTime(Date startTime) {
		this.startTime = startTime;
	}

	public Date getStopTime() {
		return stopTime;
	}

	public void setStopTime(Date stopTime) {
		this.stopTime = stopTime;
	}
	
	/** 
	 * 判断时间交集是否有效。<br/>
	 * 判断逻辑：结束时间为空 或者 开始时间<结束时间,则 该时间片段 有效。
	 * @return
	 */
	public boolean isValid(){
		
		if (startTime == null)
			return false;
		
		// 为空，表示 当前时间
		if (stopTime == null)
			return true;

		// 如果开始时间，不早于结束时间，则无效
		if (!startTime.before(stopTime))
			return false;
		
		return true;
	}
	
	/** 取得两个时间段的交集<br/>
	 *  时间片段的交集为：开始时间为  两者开始时间的 大者，  结束时间为 两者结束时间的小者
	 *  */
	public TimeIntersection countIntersection(TimeIntersection other) {

		// 本身有效
		if (!isValid())
			return null;

		// other有效
		if (other == null || !other.isValid())
			return null;

		// 时间片段的交集为：两者开始时间的 大者
		//             两者结束时间的小者
		Date start = startTime.after(other.getStartTime()) ? startTime:other.getStartTime();
		
		Date stop = null;
		if (stopTime == null){
			stop = other.getStopTime();
		} else if (other.getStopTime() == null){
			stop = stopTime;
		} else {
			stop = stopTime.before(other.getStopTime()) ? stopTime:other.getStopTime();
		}
		
		TimeIntersection intersect = new TimeIntersection(start, stop);
		
		if (intersect.isValid())
			return intersect;

		return null;

	}
}
